﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using OBL1_DiseñoDeAplicaciones.ObjetosDeNegocio;
using OBL1_DiseñoDeAplicaciones.Utilidades;

namespace OBL1_DiseñoDeAplicaciones.Interfaz
{
    public partial class Subdivision_Agregar : Form
    {
        private const string _Tarea = "TAREA";
        private const string _Subproyecto = "SUBPROYECTO";
 
        private string tagNodo; // tarea o subproyecto
        private Subdivision sub;
        private Proyecto padre;

     
        #region Properties
        public string TagNodo
        {
            get { return tagNodo; }
            set { tagNodo = value; }
        }
        public Subdivision Sub
        {
            get { return sub; }
            set { sub = value; }
        }


        #endregion

              
        public Subdivision_Agregar(bool esTarea, IObservador i, Proyecto parent)
        {
            InitializeComponent();
            padre = parent;
            if (esTarea)
            {
                tagNodo = _Tarea;
                pnlSubProyecto.Visible = false;
            }
            else {
                tagNodo = _Subproyecto;
                
            }
        }

        #region Eventos

        private void BtnGuardar_Click(object sender, EventArgs e)
        {
            bool continuar = true;
            lblDescripcionSubRequerida.Visible = false;
            lblCostoRequerido.Visible = false;
            lblErrores.Text = string.Empty;

            if (tagNodo.Equals(_Tarea) )
            {
                if (ControlarCamposTarea())
                {
                    continuar = true;
                    sub = new Tarea(txtDescripcionTarea.Text, dtpFechaInicio.Value, double.Parse(txtCosto.Text), padre);
                }
                else {
                    continuar = false;
                }

            }
            else {
                if (ControlarCamposSubproyecto())
                {
                    continuar = true;

                    //Creo una lista de subdivisiones con la tarea que obligue a crear y la agrego
                    ListaSubdivision componentes = new ListaSubdivision();
                    componentes.AgregarSubdivision(new Tarea(txtDescripcionTarea.Text, dtpFechaInicio.Value, double.Parse(txtCosto.Text), padre));
                    sub = new Subproyecto(txtDescripcion.Text, componentes, padre);
                }
                else {
                    continuar = false;
                }
                
            }
            if (continuar)
            {
                DialogResult = DialogResult.OK;
                this.Dispose();
            }
            else {
                // Centra el label en pantalla (el msj puede tener distinto largo)
                lblErrores.Left = (this.Width - lblErrores.Width) / 2;
            }
        }
       
        private void BtnCancelar_Click(object sender, EventArgs e)
        {
            DialogResult = DialogResult.Cancel;
            this.Dispose();
        }

        #endregion

        #region Control de campos requeridos

        private bool ControlarCamposTarea() {
            bool retorno=true;
            if (txtDescripcionTarea.Text.Equals(string.Empty))
            {
                lblErrores.Text = "Debe agregar una descripción a la tarea.";
                lblDescripcionTareaRequerida.Visible = true;
                retorno = false;
            }
            else {
                lblDescripcionTareaRequerida.Visible = false;
            }
            if (retorno)
            {
                if (!txtCosto.Text.Equals(string.Empty))
                {
                    try
                    {
                        double.Parse(txtCosto.Text.Trim());
                        lblCostoRequerido.Visible = false;
                    }
                    catch (FormatException)
                    {
                        lblErrores.Text = "El costo de la tarea debe ser numérico.";
                        lblCostoRequerido.Visible = true;
                        retorno = false;
                    }
                }
                else {
                    lblErrores.Text = "Debe agregar un costo a la tarea.";
                    lblCostoRequerido.Visible = true;
                    retorno = false;
                }
            }
            return retorno;
        }

        private bool ControlarCamposSubproyecto(){
            bool retorno = true;
            if (txtDescripcion.Text.Equals(string.Empty))
            {
                lblErrores.Text = "Debe agregar una descripción al subproyecto.";
                lblDescripcionSubRequerida.Visible = true;
                retorno = false;
            }
            else {
                retorno = ControlarCamposTarea();
                lblDescripcionSubRequerida.Visible = false;
            }
            return retorno;
        }

        #endregion
    }
}
